/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package SintaticoPacote;

import SintaticoPacote.TratamentoErro.ErroTabela;
import SintaticoPacote.TratamentoErro.TabelaErros;
import compilador_full.TabelaSimbolos;

/**
 *
 * @author Jomas
 */
public class chamadaDeFuncao {

    private TabelaSimbolos tabelaSimbolos;
    private parametrosChamadaDeFuncao parametros;

    public chamadaDeFuncao(TabelaSimbolos tabelaSimbolos)
    {
        this.tabelaSimbolos = tabelaSimbolos;
        parametros = new parametrosChamadaDeFuncao();
    }
    public boolean chamaFuncao()
    {
        if(tabelaSimbolos.getTipo().equals("identificador"))
        {
            tabelaSimbolos.reconhecer(tabelaSimbolos.getLookahead());
            if(tabelaSimbolos.getLookahead().equals("("))
                tabelaSimbolos.reconhecer("(");
            else
            {
                ErroTabela erro = new ErroTabela(tabelaSimbolos.getLinha(),"Erro na linha "+ tabelaSimbolos.getLinha()+ tabelaSimbolos.getLinha() +  "Faltou o (");
                TabelaErros.getInstance().getTabelaErros().add(erro);// Tabela de Erros ja contem o erro. Isso que será impresso na tela.
                return false;
            }
                
            if(parametros.isInParametroChamadaDeFuncao(tabelaSimbolos)==true)
            {
                while (tabelaSimbolos.getLookahead().equals(","))
                {
                    tabelaSimbolos.reconhecer(",");
                    if(parametros.isInParametroChamadaDeFuncao(tabelaSimbolos)==false)
                        return false;//Naum esta em parametros de função
                }
                if(tabelaSimbolos.getLookahead().equals(")"))
                        tabelaSimbolos.reconhecer(")");
                else
                {
                    ErroTabela erro = new ErroTabela(tabelaSimbolos.getLinha(),"Erro na linha "+ tabelaSimbolos.getLinha()+ tabelaSimbolos.getLinha() +  "Faltou o )");
                    TabelaErros.getInstance().getTabelaErros().add(erro);// Tabela de Erros ja contem o erro. Isso que será impresso na tela.
                    return false;
                }//Erro de )
                if(tabelaSimbolos.getLookahead().equals(";"))
                    tabelaSimbolos.reconhecer(";");
                else
                {
                    ErroTabela erro = new ErroTabela(tabelaSimbolos.getLinha(),"Erro na linha "+ tabelaSimbolos.getLinha()+ tabelaSimbolos.getLinha() +  "Faltou o ;");
                    TabelaErros.getInstance().getTabelaErros().add(erro);// Tabela de Erros ja contem o erro. Isso que será impresso na tela.
                    return false;
                }
                return true;
            }
            else if(tabelaSimbolos.getLookahead().equals(")")){
                tabelaSimbolos.reconhecer(")");
                return true;
            }
            else
                return false;
        }
        else
            return false;//Naum veio identificador        
    }
}
